﻿using System;
using System.Windows.Forms;
using Company.BLL;
using Company.BLL.GC;
using Company.BLL.KDT;
using Company.BLL.DuLieuChuan;
using System.Drawing;
using Company.Interface.GC;
using Company.Interface.KDT.GC;
using Janus.Windows.GridEX;
using Janus.Windows.GridEX.EditControls;
//using Company.Interface.Reports;

namespace Company.Interface
{    
    public partial class ToKhaiMauDichForm : BaseForm
    {
        public ToKhaiMauDich TKMD = new ToKhaiMauDich();
        public HopDong HDGC = new HopDong();
        public string NhomLoaiHinh = string.Empty;
        
        public ToKhaiMauDichForm()
        {
            InitializeComponent();            
        }

        private void loadTKMDData()
        {
            ctrDonViHaiQuan.Ma = this.TKMD.MaHaiQuan;
            txtSoLuongPLTK.Value = this.TKMD.SoLuongPLTK;
           
            // Doanh nghiệp.
            txtMaDonVi.Text = this.TKMD.MaDoanhNghiep;
            txtTenDonVi.Text = this.TKMD.TenDoanhNghiep;
          
            // Đơn vị đối tác.
            txtTenDonViDoiTac.Text = this.TKMD.TenDonViDoiTac;
           
            // Đại lý TTHQ.
            txtMaDaiLy.Text = this.TKMD.MaDaiLyTTHQ;
            txtTenDaiLy.Text = this.TKMD.TenDaiLyTTHQ;
            
            // Loại hình mậu dịch.
            ctrLoaiHinhMauDich.Ma = this.TKMD.MaLoaiHinh;
            
            // Phương tiện vận tải.
            cbPTVT.SelectedValue = this.TKMD.PTVT_ID;
            txtSoHieuPTVT.Text = this.TKMD.SoHieuPTVT;
            ccNgayDen.Value = this.TKMD.NgayDenPTVT;
          
            // Nước.
            if (this.TKMD.MaLoaiHinh.Substring(0, 1) == "N")
                ctrNuocXuatKhau.Ma = this.TKMD.NuocXK_ID;
            else
                ctrNuocXuatKhau.Ma = this.TKMD.NuocNK_ID;
           
            // ĐKGH.
            cbDKGH.SelectedValue = this.TKMD.DKGH_ID;
           
            // PTTT.
            cbPTTT.SelectedValue = this.TKMD.PTTT_ID;
           
            // Giấy phép.
            txtSoGiayPhep.Text = this.TKMD.SoGiayPhep;
            if (this.TKMD.NgayGiayPhep.Year > 1900) ccNgayGiayPhep.Value = this.TKMD.NgayGiayPhep;
            if (this.TKMD.NgayHetHanGiayPhep.Year > 1900) ccNgayHHGiayPhep.Value = this.TKMD.NgayHetHanGiayPhep;
            if (this.TKMD.SoGiayPhep.Length > 0) chkGiayPhep.Checked = true;
           
            // Hóa đơn thương mại.
            txtSoHoaDonThuongMai.Text = this.TKMD.SoHoaDonThuongMai;
            if (this.TKMD.NgayHoaDonThuongMai.Year > 1900) ccNgayHDTM.Value = this.TKMD.NgayHoaDonThuongMai;
            if (this.TKMD.SoHoaDonThuongMai.Length > 0) chkHoaDonThuongMai.Checked = true;
           
            // Địa điểm dỡ hàng.
            ctrCuaKhau.Ma = this.TKMD.CuaKhau_ID;
            
            // Nguyên tệ.
            ctrNguyenTe.Ma = this.TKMD.NguyenTe_ID;
            txtTyGiaTinhThue.Value = this.TKMD.TyGiaTinhThue;
            txtTyGiaUSD.Value = this.TKMD.TyGiaUSD;
            
            // Hợp đồng.
            txtSoHopDong.Text = this.TKMD.SoHopDong;
            if (this.TKMD.NgayHopDong.Year > 1900) ccNgayHopDong.Value = this.TKMD.NgayHopDong;
            if (this.TKMD.NgayHetHanHopDong.Year > 1900) ccNgayHHHopDong.Value = this.TKMD.NgayHetHanHopDong;
            if (this.TKMD.SoHopDong.Length > 0) chkHopDong.Checked = true;
            
            // Vận tải đơn.
            txtSoVanTaiDon.Text = this.TKMD.SoVanDon;
            if (this.TKMD.NgayVanDon.Year > 1900) ccNgayVanTaiDon.Value = this.TKMD.NgayVanDon;
            if (this.TKMD.SoVanDon.Length > 0) chkVanTaiDon.Checked = true;
            
            // Địa điểm xếp hàng.
            txtDiaDiemXepHang.Text = this.TKMD.DiaDiemXepHang;
            if (this.TKMD.DiaDiemXepHang.Length > 0) chkDiaDiemXepHang.Checked = true;
            
            // Tên chủ hàng.
            txtTenChuHang.Text = this.TKMD.TenChuHang;
            
            // Container 20.
            txtSoContainer20.Value = this.TKMD.SoContainer20;
            
            // Container 40.
            txtSoContainer40.Value = this.TKMD.SoContainer40;
            
            // Số kiện hàng.
            txtSoKien.Value = this.TKMD.SoKien;
            
            // Trọng lượng.
            txtTrongLuong.Value = this.TKMD.TrongLuong;
            
            // Lệ phí HQ.
            txtLePhiHQ.Value = this.TKMD.LePhiHaiQuan;
            
            // Phí BH.
            txtPhiBaoHiem.Value = this.TKMD.PhiBaoHiem;
            
            // Phí VC.
            txtPhiVanChuyen.Value = this.TKMD.PhiVanChuyen;
            if (this.TKMD.LoaiHangHoa == "S")
            {
                radSP.Checked = true;
                radNPL.Checked = false;
                radTB.Checked = false;
            }
            else if (this.TKMD.LoaiHangHoa == "N")
            {
                radSP.Checked = false;
                radNPL.Checked = true;
                radTB.Checked = false;
            }
            else if (this.TKMD.LoaiHangHoa == "T")
            {
                radSP.Checked = false;
                radNPL.Checked = false;
                radTB.Checked = true;
            }
            if(this.TKMD.HMDCollection==null || this.TKMD.HMDCollection.Count==0)
                this.TKMD.LoadHMDCollection();
            if (this.TKMD.ChungTuTKCollection == null || this.TKMD.ChungTuTKCollection.Count == 0)
                this.TKMD.LoadChungTuTKCollection();
            dgList.DataSource = this.TKMD.HMDCollection;
            dgList.Refetch();
            gridEX1.DataSource = this.TKMD.ChungTuTKCollection;
            gridEX1.Refetch();
            //chung tu kem
            txtChungTu.Text = this.TKMD.GiayTo;
            //so to khai 
            if(this.TKMD.SoToKhai>0)
                txtSoToKhai.Text = this.TKMD.SoToKhai.ToString()+"/"+this.TKMD.NgayDangKy.Year.ToString()+"/"+this.TKMD.MaHaiQuan;
            if (TKMD.TrangThaiXuLy == TrangThaiXuLy.CHO_DUYET)
                lblTrangThai.Text = "Chờ duyệt";
            else if (TKMD.TrangThaiXuLy == TrangThaiXuLy.CHUA_KHAI_BAO)
                lblTrangThai.Text = "Chưa khai báo";
            else if (TKMD.TrangThaiXuLy == TrangThaiXuLy.KHONG_PHE_DUYET)
                lblTrangThai.Text = "Không được phê duyệt";
            else if (TKMD.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                lblTrangThai.Text = "Đã duyệt";
                if (TKMD.PhanLuong == "")
                    lblTrangThai.Text = "Đã duyệt";
                else
                {
                    //xanh
                    if (TKMD.PhanLuong == "1" || TKMD.PhanLuong == "3" || TKMD.PhanLuong == "5")
                        lblTrangThai.Text = "Tờ khai đã được phân luồng xanh";
                    else if (TKMD.PhanLuong == "2" || TKMD.PhanLuong == "4" || TKMD.PhanLuong == "6" || TKMD.PhanLuong == "10")
                        lblTrangThai.Text = "Tờ khai đã được phân luồng đỏ";
                    else if (TKMD.PhanLuong == "8" || TKMD.PhanLuong == "12")
                        lblTrangThai.Text = "Tờ khai đã được phân luồng vàng";
                }
                
            }
        }
        
        private void khoitao_DuLieuChuan()
        {
            // Loại hình mậu dịch.
            ctrLoaiHinhMauDich.Nhom = this.NhomLoaiHinh;
            ctrLoaiHinhMauDich.Ma = this.NhomLoaiHinh + "01";       

            // Phương thức thanh toán.
            cbPTTT.DataSource = PhuongThucThanhToan.SelectAll();
            cbPTTT.DisplayMember = cbPTTT.ValueMember = "ID";
            cbPTTT.SelectedValue = GlobalSettings.PTTT_MAC_DINH;
            
            // Điều kiện giao hàng.
            cbDKGH.DataSource = DieuKienGiaoHang.SelectAll();
            cbDKGH.SelectedValue = GlobalSettings.DKGH_MAC_DINH;
            
            // Phương tiện vận tải.
            cbPTVT.DataSource = PhuongThucVanTai.SelectAll();
            cbPTVT.SelectedValue = GlobalSettings.PTVT_MAC_DINH;            
        }

        private void khoitao_GiaoDienToKhai()
        {
            this.NhomLoaiHinh = this.NhomLoaiHinh.Substring(0, 3);
            string loaiToKhai = this.NhomLoaiHinh.Substring(0, 1);            
            if (loaiToKhai == "N")
            {
                // Tiêu đề.
                this.Text = "Tờ khai nhập khẩu (" + this.NhomLoaiHinh + ")";
            }
            else
            {
                // Tiêu đề.
                this.Text = "Tờ khai xuất khẩu (" + this.NhomLoaiHinh + ")";
                this.uiGroupBox1.BackColor = System.Drawing.Color.FromArgb(255, 228, 225);
                // Người XK / Người NK.
                grbNguoiNK.Text = "Người xuất khẩu";
                grbNguoiXK.Text = "Người nhập khẩu";
                
                // Phương tiện vận tải.
                lblSoHieuPTVT.Visible = txtSoHieuPTVT.Visible = false;
                lblNgayDenPTVT.Visible = ccNgayDen.Visible = false;
                
                // Vận tải đơn.
                chkVanTaiDon.Visible = false;
                grbVanTaiDon.Visible = false;
                
                // Nước XK.
                grbNuocXK.Text = "Nước nhập khẩu";
                
                // Địa điểm xếp hàng / Địa điểm dỡ hàng.
                grbDiaDiemDoHang.Text = "Địa điểm xếp hàng";
                chkDiaDiemXepHang.Visible = grbDiaDiemXepHang.Visible = false;
            }
            
            // Loại hình gia công.
            if (this.NhomLoaiHinh == "NGC" || this.NhomLoaiHinh == "XGC")
            {
                chkHopDong.Checked = true;
                chkHopDong.Visible = false;
                txtSoHopDong.ReadOnly = ccNgayHopDong.ReadOnly = ccNgayHHHopDong.ReadOnly = true;
                txtSoHopDong.BackColor = ccNgayHopDong.BackColor = ccNgayHHHopDong.BackColor = Color.FromArgb(255, 255, 192);
                txtSoHopDong.ButtonStyle = EditButtonStyle.Ellipsis;
                if (this.NhomLoaiHinh == "NGC")
                {
                 
                    radSP.Visible = false;
                    radSP.Checked = false;
                    radNPL.Checked = true;
                    radTB.Checked = false;

                }
            }
            else if (this.NhomLoaiHinh == "NSX" || this.NhomLoaiHinh == "XSX")
            {
                if (this.NhomLoaiHinh == "NSX")
                {
                    grpLoaiHangHoa.Visible = false;
                    radNPL.Checked = true;
                    radSP.Checked = false;
                    radTB.Checked = false;

                }
                else
                {
                    radTB.Visible = false;
                }
            }
            else
                grpLoaiHangHoa.Visible = false;
            
        }
                
        //-----------------------------------------------------------------------------------------
        
        private void ToKhaiNhapKhauSXXK_Form_Load(object sender, EventArgs e)
        {
            // Người nhập khẩu / Người xuất khẩu.
            txtMaDonVi.Text = GlobalSettings.MA_DON_VI;
            txtTenDonVi.Text = GlobalSettings.TEN_DON_VI;
            txtTenDonViDoiTac.Text = GlobalSettings.TEN_DOI_TAC;
            txtTyGiaUSD.Value = Convert.ToDecimal(GlobalSettings.TY_GIA_USD);
            ccNgayDen.Value = DateTime.Today;
            this.khoitao_DuLieuChuan();
            switch (this.OpenType)
            {
                case OpenFormType.View:
                    this.loadTKMDData();
                    this.ViewTKMD();
                    this.NhomLoaiHinh = this.TKMD.MaLoaiHinh.Substring(0, 3);
                    break;
                case OpenFormType.Edit:
                    this.loadTKMDData();
                    this.NhomLoaiHinh = this.TKMD.MaLoaiHinh.Substring(0, 3);
                    break;
            }
            
            this.khoitao_GiaoDienToKhai();         

        }

        private void ViewTKMD()
        {
            cmdSave.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            cmdThemHang.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            cmdTinhLaiThue.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            cmdSend.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            ChungTuKemTheo.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            ctrDonViHaiQuan.ReadOnly = true;
            txtSoLuongPLTK.ReadOnly = true;

            // Doanh nghiệp.
            txtMaDonVi.ReadOnly = true;
            txtTenDonVi.ReadOnly = true;

            // Đơn vị đối tác.
            txtTenDonViDoiTac.ReadOnly = true;

            // Đại lý TTHQ.
            txtMaDaiLy.ReadOnly = true;
            txtTenDaiLy.ReadOnly = true;

            // Loại hình mậu dịch.
            ctrLoaiHinhMauDich.ReadOnly = true ;

            // Phương tiện vận tải.
            cbPTVT.ReadOnly = true;
            txtSoHieuPTVT.ReadOnly = true;
            ccNgayDen.ReadOnly = true;

            // Nước.
            ctrNuocXuatKhau.ReadOnly = true;

            // ĐKGH.
            cbDKGH.ReadOnly = true;

            // PTTT.
            cbPTTT.ReadOnly = true;

            // Giấy phép.
            txtSoGiayPhep.ReadOnly = true;
            ccNgayGiayPhep.ReadOnly = true;
            ccNgayHHGiayPhep.ReadOnly = true;


            // Hóa đơn thương mại.
            txtSoHoaDonThuongMai.ReadOnly = true;
            ccNgayHDTM.ReadOnly = true;

            // Địa điểm dỡ hàng.
            ctrCuaKhau.ReadOnly = true;

            // Nguyên tệ.
            ctrNguyenTe.ReadOnly = true;
            txtTyGiaTinhThue.ReadOnly = true;
            txtTyGiaUSD.ReadOnly = true;

            // Hợp đồng.
            txtSoHopDong.ReadOnly = true;
            ccNgayHopDong.ReadOnly = true;
            ccNgayHHHopDong.ReadOnly = true;

            // Vận tải đơn.
            txtSoVanTaiDon.ReadOnly = true;
            ccNgayVanTaiDon.ReadOnly = true;

            // Địa điểm xếp hàng.
            txtDiaDiemXepHang.ReadOnly = true;

            // Tên chủ hàng.
            txtTenChuHang.ReadOnly = true;

            // Container 20.
            txtSoContainer20.ReadOnly = true;

            // Container 40.
            txtSoContainer40.ReadOnly = true;

            // Số kiện hàng.
            txtSoKien.ReadOnly = true;

            // Trọng lượng.
            txtTrongLuong.ReadOnly = true;

            // Lệ phí HQ.
            txtLePhiHQ.ReadOnly = true;

            // Phí BH.
            txtPhiBaoHiem.ReadOnly = true;

            // Phí VC.
            txtPhiVanChuyen.ReadOnly = true;
        }

        //-----------------------------------------------------------------------------------------
        private void chkHoaDonThuongMai_CheckedChanged(object sender, EventArgs e)
        {
            grbHoaDonThuongMai.Enabled = chkHoaDonThuongMai.Checked;
        }

        //-----------------------------------------------------------------------------------------
        private void chkGiayPhep_CheckedChanged(object sender, EventArgs e)
        {
            gbGiayPhep.Enabled = chkGiayPhep.Checked;
        }

        //-----------------------------------------------------------------------------------------
        private void chkHopDong_CheckedChanged(object sender, EventArgs e)
        {
            grbHopDong.Enabled = chkHopDong.Checked;
        }

        //-----------------------------------------------------------------------------------------
        private void chkVanTaiDon_CheckedChanged(object sender, EventArgs e)
        {
            grbVanTaiDon.Enabled = chkVanTaiDon.Checked;
        }

        //-----------------------------------------------------------------------------------------
        private void chkDiaDiemXepHang_CheckedChanged(object sender, EventArgs e)
        {
            grbDiaDiemXepHang.Enabled = chkDiaDiemXepHang.Checked;
        }
        //-----------------------------------------------------------------------------------------

        private void themHang()
        {
            if (this.NhomLoaiHinh == "NGC" || this.NhomLoaiHinh == "XGC")
            {
                if (txtSoHopDong.Text == "")
                {
                    epError.SetError(txtSoHopDong, "Số hợp đồng không được rỗng.");
                    epError.SetIconPadding(txtSoHopDong, -8);
                    return;
                }
                else epError.Clear();
            }
            cvError.ContainerToValidate = grbNguyenTe;
            cvError.Validate();
            if (!cvError.IsValid) return;
            
            HangMauDichForm f = new HangMauDichForm();
            if (this.HDGC.SoHopDong == "")
            {
                this.HDGC.SoHopDong = TKMD.SoHopDong;
                this.HDGC.MaDoanhNghiep = TKMD.MaDoanhNghiep;
                this.HDGC.MaHaiQuan = TKMD.MaHaiQuan;
                this.HDGC.NgayKy = TKMD.NgayHopDong;
            }
            f.HD = this.HDGC;
            f.TKMD = this.TKMD;
            f.NhomLoaiHinh = this.NhomLoaiHinh;
            if (radNPL.Checked) f.LoaiHangHoa = "N";
            if (radSP.Checked) f.LoaiHangHoa = "S";
            if (radTB.Checked) f.LoaiHangHoa = "T";
            f.MaHaiQuan = ctrDonViHaiQuan.Ma;
            f.HMDCollection = this.TKMD.HMDCollection;
            f.MaNguyenTe = ctrNguyenTe.Ma;
            f.TyGiaTT = Convert.ToDecimal(txtTyGiaTinhThue.Value);
            f.ShowDialog();
            this.TKMD.HMDCollection = f.HMDCollection;
            dgList.DataSource = this.TKMD.HMDCollection;
            dgList.Refetch();
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Lưu thông tin tờ khai.
        /// </summary>
        public void Save()
        {
            bool valid = false;
            if (this.NhomLoaiHinh.Substring(0, 1) == "N")
            {
                cvError.ContainerToValidate = this;
                cvError.Validate();
                valid = cvError.IsValid;
            }
            else
            {
                cvError.ContainerToValidate = this.txtTenDonViDoiTac;
                cvError.Validate();
                bool valid1 = cvError.IsValid;
                cvError.ContainerToValidate = this.grbNguyenTe;
                cvError.Validate();
                bool valid2 = cvError.IsValid;
                valid = valid1 && valid2;
            }
            if (valid)
            {
                if (this.TKMD.HMDCollection.Count == 0)
                {
                    MessageBox.Show("Chưa nhập thông tin hàng của tờ khai", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                
                if (Convert.ToDecimal(txtTyGiaTinhThue.Value) == 0)
                {
                    epError.SetError(txtTyGiaTinhThue, "Tỷ giá tính thuế không hợp lệ.");
                    epError.SetIconPadding(txtTyGiaTinhThue, -8);
                    return;
                    
                }
                this.TKMD.SoTiepNhan = this.TKMD.SoTiepNhan;
                this.TKMD.MaHaiQuan = ctrDonViHaiQuan.Ma;
                //this.tkmd.NgayTiepNhan = DateTime.Parse("01/01/1900");
                //this.tkmd.NgayDangKy = DateTime.Parse("01/01/1900");
                this.TKMD.SoHang = (short)this.TKMD.HMDCollection.Count;
                this.TKMD.SoLuongPLTK = Convert.ToInt16(txtSoLuongPLTK.Text);
                
                // Doanh nghiệp.
                this.TKMD.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                this.TKMD.TenDoanhNghiep = GlobalSettings.TEN_DON_VI;

                // Đơn vị đối tác.
                this.TKMD.TenDonViDoiTac = txtTenDonViDoiTac.Text;

                // (chưa có)
                //this.TKMD.mad = txtMaDonViUyThac.Text;                

                // Đại lý TTHQ.
                this.TKMD.MaDaiLyTTHQ = txtMaDaiLy.Text;
                this.TKMD.TenDaiLyTTHQ = txtTenDaiLy.Text;

                // Loại hình mậu dịch.
                this.TKMD.MaLoaiHinh = ctrLoaiHinhMauDich.Ma;

                // Giấy phép.
                if (chkGiayPhep.Checked)
                {
                    this.TKMD.SoGiayPhep = txtSoGiayPhep.Text;
                    this.TKMD.NgayGiayPhep = ccNgayGiayPhep.Value;
                    this.TKMD.NgayHetHanGiayPhep = ccNgayHHGiayPhep.Value;
                }
                else
                {
                    this.TKMD.SoGiayPhep = "";
                    this.TKMD.NgayGiayPhep = DateTime.Parse("01/01/1900");
                    this.TKMD.NgayHetHanGiayPhep = DateTime.Parse("01/01/1900");
                }

                // 7. Hợp đồng.
                if (chkHopDong.Checked)
                {
                    this.TKMD.SoHopDong = txtSoHopDong.Text;
                    // Ngày HD.
                    if (ccNgayHopDong.IsNullDate)
                        this.TKMD.NgayHopDong = DateTime.Parse("01/01/1900");
                    else
                        this.TKMD.NgayHopDong = ccNgayHopDong.Value;
                    // Ngày hết hạn HD.
                    if (ccNgayHHHopDong.IsNullDate)
                        this.TKMD.NgayHetHanHopDong = DateTime.Parse("01/01/1900");
                    else
                        this.TKMD.NgayHetHanHopDong = ccNgayHHHopDong.Value;
                }
                else
                {
                    this.TKMD.SoHopDong = "";
                    this.TKMD.NgayHopDong = DateTime.Parse("01/01/1900");
                    this.TKMD.NgayHetHanHopDong = DateTime.Parse("01/01/1900");
                }

                // Hóa đơn thương mại.
                if (chkHoaDonThuongMai.Checked)
                {
                    this.TKMD.SoHoaDonThuongMai = txtSoHoaDonThuongMai.Text;
                    if (ccNgayHDTM.IsNullDate)
                        this.TKMD.NgayHoaDonThuongMai = DateTime.Parse("01/01/1900");
                    else
                        this.TKMD.NgayHoaDonThuongMai = ccNgayHDTM.Value;
                }
                else
                {
                    this.TKMD.SoHoaDonThuongMai = "";
                    this.TKMD.NgayHoaDonThuongMai = DateTime.Parse("01/01/1900");
                }

                // Phương tiện vận tải.
                this.TKMD.PTVT_ID = cbPTVT.SelectedValue.ToString();
                this.TKMD.SoHieuPTVT = txtSoHieuPTVT.Text;
                this.TKMD.NgayDenPTVT = ccNgayDen.Value;

                // Vận tải đơn.
                if (chkVanTaiDon.Checked)
                {
                    this.TKMD.SoVanDon = txtSoVanTaiDon.Text;
                    if (ccNgayVanTaiDon.IsNullDate)
                        this.TKMD.NgayVanDon = DateTime.Parse("01/01/1900");
                    else
                        this.TKMD.NgayVanDon = ccNgayVanTaiDon.Value;
                }
                else
                {
                    this.TKMD.SoVanDon = "";
                    this.TKMD.NgayVanDon = DateTime.Parse("01/01/1900");
                }

                // Nước.
                if (this.NhomLoaiHinh.Substring(0, 1) == "N")
                {
                    this.TKMD.NuocXK_ID = ctrNuocXuatKhau.Ma;
                    this.TKMD.NuocNK_ID = "VN".PadRight(3);
                }
                else
                {
                    this.TKMD.NuocXK_ID = "VN".PadRight(3);
                    this.TKMD.NuocNK_ID = ctrNuocXuatKhau.Ma; 
                }

                // Địa điểm xếp hàng.
                if (chkDiaDiemXepHang.Checked)
                    this.TKMD.DiaDiemXepHang = txtDiaDiemXepHang.Text;
                else
                    this.TKMD.DiaDiemXepHang = "";

                // Địa điểm dỡ hàng.
                this.TKMD.CuaKhau_ID = ctrCuaKhau.Ma;

                // Điều kiện giao hàng.
                this.TKMD.DKGH_ID = cbDKGH.SelectedValue.ToString();

                // Đồng tiền thanh toán.
                this.TKMD.NguyenTe_ID = ctrNguyenTe.Ma;
                this.TKMD.TyGiaTinhThue = Convert.ToDecimal(txtTyGiaTinhThue.Text);
                this.TKMD.TyGiaUSD = Convert.ToDecimal(txtTyGiaUSD.Text);

                // Phương thức thanh toán.
                this.TKMD.PTTT_ID = cbPTTT.SelectedValue.ToString();

                //
                this.TKMD.TenChuHang = txtTenChuHang.Text;
                this.TKMD.SoContainer20 = Convert.ToDecimal(txtSoContainer20.Text);
                this.TKMD.SoContainer40 = Convert.ToDecimal(txtSoContainer40.Text);
                this.TKMD.SoKien = Convert.ToDecimal(txtSoKien.Text);
                this.TKMD.TrongLuong = Convert.ToDecimal(txtTrongLuong.Text);

                // Tổng trị giá khai báo (Chưa tính).
                this.TKMD.TongTriGiaKhaiBao = 0;
                //
                this.TKMD.TrangThaiXuLy = -1;
                this.TKMD.LoaiToKhaiGiaCong = "NPL";
                //
                this.TKMD.LePhiHaiQuan = Convert.ToDecimal(txtLePhiHQ.Text);
                this.TKMD.PhiBaoHiem = Convert.ToDecimal(txtPhiBaoHiem.Text);
                this.TKMD.PhiVanChuyen = Convert.ToDecimal(txtPhiVanChuyen.Text);
                //this.tkmd.NgayGui = DateTime.Parse("01/01/1900");
                if (radNPL.Checked) this.TKMD.LoaiHangHoa = "N";
                if (radSP.Checked) this.TKMD.LoaiHangHoa = "S";
                if (radTB.Checked) this.TKMD.LoaiHangHoa = "T";
                this.tinhLaiThue();
                this.TKMD.GiayTo = txtChungTu.Text;
                long ret;
                try
                {
                    this.TKMD.InsertUpdateFull();
                    this.TKMD.LoadChungTuTKCollection();
                    this.TKMD.LoadHMDCollection();
                    dgList.DataSource = this.TKMD.HMDCollection;
                    dgList.Refetch();
                    gridEX1.DataSource = this.TKMD.ChungTuTKCollection;
                    gridEX1.Refetch();
                    ShowMessage("Lưu tờ khai thành công.", false);
                }
                catch (Exception ex)
                {
                    ShowMessage(ex.Source, false);
                }
            }
        }

        private void tinhLaiThue()
        {
            this.TKMD.TongTriGiaKhaiBao = 0;
            foreach (HangMauDich hmd in this.TKMD.HMDCollection)
            {
                // Tính lại thuế.
                hmd.TinhThue(Convert.ToDecimal(txtTyGiaTinhThue.Value));
                // Tổng trị giá khai báo.
                this.TKMD.TongTriGiaKhaiBao += hmd.TriGiaKB;
            }
            dgList.DataSource = this.TKMD.HMDCollection;
            dgList.Refetch();            
        }
        //-----------------------------------------------------------------------------------------
        
        private void inToKhai()
        {
            //ReportViewerForm f = new ReportViewerForm();
            //f.TKMD = this.TKMD;
            //f.ShowDialog(this);
        }
        //-----------------------------------------------------------------------------------------
        private void cmMain_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)
        {
            switch(e.Command.Key)
            {
                case "cmdSave":
                    this.Save();
                    break;
                case "cmdTinhLaiThue":
                    this.tinhLaiThue();
                    break;
                case "cmdThemHang":
                    this.themHang();
                    break;
                case "cmdPrint": 
                    this.inToKhai();
                    break;
                case "cmdSend":
                    this.Send();
                    break;
                case "ChungTuKemTheo":
                    this.AddChungTu();
                    break;
            }
        }
        private void AddChungTu()
        {
            ChungTuForm f = new ChungTuForm();
            f.OpenType = OpenFormType.Insert;
            f.collection = this.TKMD.ChungTuTKCollection;
            f.ShowDialog();
            this.TKMD.ChungTuTKCollection = f.collection;            
            gridEX1.DataSource = this.TKMD.ChungTuTKCollection;
            gridEX1.Refetch();

        }
        private void Send()
        {
            this.Cursor = Cursors.Default;
            bool valid = false;
            if (this.NhomLoaiHinh.Substring(0, 1) == "N")
            {
                cvError.ContainerToValidate = this;
                cvError.Validate();
                valid = cvError.IsValid;
            }
            else
            {
                cvError.ContainerToValidate = this.txtTenDonViDoiTac;
                cvError.Validate();
                bool valid1 = cvError.IsValid;
                cvError.ContainerToValidate = this.grbNguyenTe;
                cvError.Validate();
                bool valid2 = cvError.IsValid;
                valid = valid1 && valid2;
            }
            if (valid)
            {
                if (this.TKMD.HMDCollection.Count == 0)
                {
                    MessageBox.Show("Chưa nhập thông tin hàng của tờ khai", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (Convert.ToDecimal(txtTyGiaTinhThue.Value) == 0)
                {
                    epError.SetError(txtTyGiaTinhThue, "Tỷ giá tính thuế không hợp lệ.");
                    epError.SetIconPadding(txtTyGiaTinhThue, -8);
                    return;

                } 
                if (this.TKMD.ID == 0)
                {
                    this.TKMD.SoTiepNhan = 0;
                    this.TKMD.TrangThaiXuLy = -1;
                }
                
                this.TKMD.MaHaiQuan = GlobalSettings.MA_HAI_QUAN;
                //this.tkmd.NgayTiepNhan = DateTime.Parse("01/01/1900");
                //this.tkmd.NgayDangKy = DateTime.Parse("01/01/1900");
                this.TKMD.SoHang = (short)this.TKMD.HMDCollection.Count;
                this.TKMD.SoLuongPLTK = Convert.ToInt16(txtSoLuongPLTK.Text);

                // Doanh nghiệp.
                this.TKMD.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                this.TKMD.TenDoanhNghiep = GlobalSettings.TEN_DON_VI;

                // Đơn vị đối tác.
                this.TKMD.TenDonViDoiTac = txtTenDonViDoiTac.Text;

                // (chưa có)
                //this.tkmd.MaDonViUT = txtMaDonViUyThac.Text;
                //this.tkmd.TenDonViUT = txtTenDonViUyThac.Text;

                // Đại lý TTHQ.
                this.TKMD.MaDaiLyTTHQ = txtMaDaiLy.Text;
                this.TKMD.TenDaiLyTTHQ = txtTenDaiLy.Text;

                // Loại hình mậu dịch.
                this.TKMD.MaLoaiHinh = ctrLoaiHinhMauDich.Ma;

                // Giấy phép.
                if (chkGiayPhep.Checked)
                {
                    this.TKMD.SoGiayPhep = txtSoGiayPhep.Text;
                    this.TKMD.NgayGiayPhep = ccNgayGiayPhep.Value;
                    this.TKMD.NgayHetHanGiayPhep = ccNgayHHGiayPhep.Value;
                }
                else
                {
                    this.TKMD.SoGiayPhep = "";
                    this.TKMD.NgayGiayPhep = DateTime.Parse("01/01/1900");
                    this.TKMD.NgayHetHanGiayPhep = DateTime.Parse("01/01/1900");
                }

                // 7. Hợp đồng.
                if (chkHopDong.Checked)
                {
                    this.TKMD.SoHopDong = txtSoHopDong.Text;
                    // Ngày HD.
                    if (ccNgayHopDong.IsNullDate)
                        this.TKMD.NgayHopDong = DateTime.Parse("01/01/1900");
                    else
                        this.TKMD.NgayHopDong = ccNgayHopDong.Value;
                    // Ngày hết hạn HD.
                    if (ccNgayHHHopDong.IsNullDate)
                        this.TKMD.NgayHetHanHopDong = DateTime.Parse("01/01/1900");
                    else
                        this.TKMD.NgayHetHanHopDong = ccNgayHHHopDong.Value;
                }
                else
                {
                    this.TKMD.SoHopDong = "";
                    this.TKMD.NgayHopDong = DateTime.Parse("01/01/1900");
                    this.TKMD.NgayHetHanHopDong = DateTime.Parse("01/01/1900");
                }

                // Hóa đơn thương mại.
                if (chkHoaDonThuongMai.Checked)
                {
                    this.TKMD.SoHoaDonThuongMai = txtSoHoaDonThuongMai.Text;
                    if (ccNgayHDTM.IsNullDate)
                        this.TKMD.NgayHoaDonThuongMai = DateTime.Parse("01/01/1900");
                    else
                        this.TKMD.NgayHoaDonThuongMai = ccNgayHDTM.Value;
                }
                else
                {
                    this.TKMD.SoHoaDonThuongMai = "";
                    this.TKMD.NgayHoaDonThuongMai = DateTime.Parse("01/01/1900");
                }

                // Phương tiện vận tải.
                this.TKMD.PTVT_ID = cbPTVT.SelectedValue.ToString();
                this.TKMD.SoHieuPTVT = txtSoHieuPTVT.Text;
                this.TKMD.NgayDenPTVT = ccNgayDen.Value;

                // Vận tải đơn.
                if (chkVanTaiDon.Checked)
                {
                    this.TKMD.SoVanDon = txtSoVanTaiDon.Text;
                    if (ccNgayVanTaiDon.IsNullDate)
                        this.TKMD.NgayVanDon = DateTime.Parse("01/01/1900");
                    else
                        this.TKMD.NgayVanDon = ccNgayVanTaiDon.Value;
                }
                else
                {
                    this.TKMD.SoVanDon = "";
                    this.TKMD.NgayVanDon = DateTime.Parse("01/01/1900");
                }

                // Nước.
                if (this.NhomLoaiHinh.Substring(0, 1) == "N")
                {
                    this.TKMD.NuocXK_ID = ctrNuocXuatKhau.Ma;
                    this.TKMD.NuocNK_ID = "VN".PadRight(3);
                }
                else
                {
                    this.TKMD.NuocXK_ID = "VN".PadRight(3);
                    this.TKMD.NuocNK_ID = ctrNuocXuatKhau.Ma;
                }

                // Địa điểm xếp hàng.
                if (chkDiaDiemXepHang.Checked)
                    this.TKMD.DiaDiemXepHang = txtDiaDiemXepHang.Text;
                else
                    this.TKMD.DiaDiemXepHang = "";

                // Địa điểm dỡ hàng.
                this.TKMD.CuaKhau_ID = ctrCuaKhau.Ma;

                // Điều kiện giao hàng.
                this.TKMD.DKGH_ID = cbDKGH.SelectedValue.ToString();

                // Đồng tiền thanh toán.
                this.TKMD.NguyenTe_ID = ctrNguyenTe.Ma;
                this.TKMD.TyGiaTinhThue = Convert.ToDecimal(txtTyGiaTinhThue.Text);
                this.TKMD.TyGiaUSD = Convert.ToDecimal(txtTyGiaUSD.Text);

                // Phương thức thanh toán.
                this.TKMD.PTTT_ID = cbPTTT.SelectedValue.ToString();

                //
                this.TKMD.TenChuHang = txtTenChuHang.Text;
                this.TKMD.SoContainer20 = Convert.ToDecimal(txtSoContainer20.Text);
                this.TKMD.SoContainer40 = Convert.ToDecimal(txtSoContainer40.Text);
                this.TKMD.SoKien = Convert.ToDecimal(txtSoKien.Text);
                this.TKMD.TrongLuong = Convert.ToDecimal(txtTrongLuong.Text);

                // Tổng trị giá khai báo (Chưa tính).
                this.TKMD.TongTriGiaKhaiBao = 0;
                //

                this.TKMD.LoaiToKhaiGiaCong = "NPL";
                //
                this.TKMD.LePhiHaiQuan = Convert.ToDecimal(txtLePhiHQ.Text);
                this.TKMD.PhiBaoHiem = Convert.ToDecimal(txtPhiBaoHiem.Text);
                this.TKMD.PhiVanChuyen = Convert.ToDecimal(txtPhiVanChuyen.Text);
                //this.tkmd.NgayGui = DateTime.Parse("01/01/1900");
                if (radNPL.Checked) this.TKMD.LoaiHangHoa = "N";
                if (radSP.Checked) this.TKMD.LoaiHangHoa = "S";
                if (radTB.Checked) this.TKMD.LoaiHangHoa = "T";
                this.tinhLaiThue();
                try
                {
                    WSForm wsForm = new WSForm();
                    wsForm.ShowDialog(this);
                    if (!wsForm.IsReady) return;
                    this.Cursor = Cursors.WaitCursor;
                    this.TKMD.WSSend();
                    this.Cursor = Cursors.Default;
                    if (this.TKMD.SoTiepNhan == 0)
                    {
                        ShowMessage("Khai báo không thành công", true);

                    }
                    else
                    {
                        ShowMessage("Khai báo thành công!\nSố tiếp nhận đăng ký điện tử: " + this.TKMD.SoTiepNhan, false);
                    }

                }
                catch (Exception ex)
                {
                    this.Cursor = Cursors.Default;
                    if (ex.Message.IndexOf("123DaDuyet321") >= 0)
                    {
                        ShowMessage("Danh sách này đã duyệt rồi ", false);
                        return;
                    }
                    if (ShowMessage("Khai báo không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                    {
                        HangDoi hd = new HangDoi();
                        hd.ID = this.TKMD.ID;
                        hd.LoaiToKhai = LoaiToKhai.TO_KHAI_MAU_DICH;
                        hd.TrangThai = this.TKMD.TrangThaiXuLy;
                        hd.ChucNang = ChucNang.KHAI_BAO;
                        MainForm.AddToQueueForm(hd);
                        MainForm.ShowQueueForm();
                    }

                }
                finally
                {
                    this.Cursor = Cursors.Default;
                }
            }
        }

        //-----------------------------------------------------------------------------------------
        private void ctrDonViHaiQuan_ValueChanged(object sender, EventArgs e)
        {

        }

        //-----------------------------------------------------------------------------------------
        private void txtSoHopDong_ButtonClick(object sender, EventArgs e)
        {
            switch (this.NhomLoaiHinh)
            {
                case "NGC":
                    HopDongRegistedForm f = new HopDongRegistedForm();
                    f.HopDongSelected.MaHaiQuan = ctrDonViHaiQuan.Ma;
                    f.IsBrowseForm = true;
                    f.ShowDialog();
                    if (f.HopDongSelected.SoHopDong != "")
                    {
                        this.HDGC = f.HopDongSelected;
                        txtSoHopDong.Text = f.HopDongSelected.SoHopDong;
                        ccNgayHopDong.Value = f.HopDongSelected.NgayKy;
                        ccNgayHHHopDong.Value = f.HopDongSelected.NgayHetHan;
                    }
                    break;
                case "XGC":
                    HopDongRegistedForm f1 = new HopDongRegistedForm();
                    f1.HopDongSelected.MaHaiQuan = ctrDonViHaiQuan.Ma;
                    f1.IsBrowseForm = true;
                    f1.ShowDialog();     
                    if (f1.HopDongSelected.SoHopDong != "")
                    {
                        this.HDGC = f1.HopDongSelected;
                        txtSoHopDong.Text = f1.HopDongSelected.SoHopDong;
                        ccNgayHopDong.Value = f1.HopDongSelected.NgayKy;
                        ccNgayHHHopDong.Value = f1.HopDongSelected.NgayHetHan;
                    }
                    break;
            }
        }

        private void dgList_RowDoubleClick(object sender, RowActionEventArgs e)
        {
            GridEXSelectedItemCollection items = dgList.SelectedItems;
            foreach (GridEXSelectedItem i in items)
            {
                if (i.RowType == RowType.Record)
                {
                    HangMauDichEditForm f = new HangMauDichEditForm();
                    f.HMD = this.TKMD.HMDCollection[i.Position];
                    if (this.HDGC.SoHopDong == "")
                    {
                        this.HDGC.SoHopDong = TKMD.SoHopDong;
                        this.HDGC.MaDoanhNghiep = TKMD.MaDoanhNghiep;
                        this.HDGC.MaHaiQuan = TKMD.MaHaiQuan;
                        this.HDGC.NgayKy = TKMD.NgayHopDong;
                    }
                    f.HD = this.HDGC;                    
                    f.collection = this.TKMD.HMDCollection;
                    if (radNPL.Checked) this.TKMD.LoaiHangHoa = "N";
                    if (radSP.Checked) this.TKMD.LoaiHangHoa = "S";
                    if (radTB.Checked) this.TKMD.LoaiHangHoa = "T";
                    f.LoaiHangHoa = this.TKMD.LoaiHangHoa;
                    f.NhomLoaiHinh = this.NhomLoaiHinh;
                    f.MaHaiQuan = this.TKMD.MaHaiQuan;
                    f.MaNguyenTe = ctrNguyenTe.Ma;
                    f.TyGiaTT = Convert.ToDecimal(txtTyGiaTinhThue.Value);

                    f.ShowDialog();
                    if (f.IsEdited)
                    {
                        if (f.HMD.TKMD_ID > 0)
                            f.HMD.Update();
                        else
                            this.TKMD.HMDCollection[i.Position] = f.HMD;
                    }
                    else if (f.IsDeleted)
                    {
                        if (f.HMD.TKMD_ID > 0)
                            f.HMD.Delete();
                        this.TKMD.HMDCollection.RemoveAt(i.Position);
                    }
                    dgList.DataSource = this.TKMD.HMDCollection;
                    try
                    {
                        dgList.Refetch();
                    }
                    catch { dgList.DataSource = this.TKMD.HMDCollection; }
                }
                break;
            }
        }

        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            e.Row.Cells["NuocXX_ID"].Text = this.Nuoc_GetName(e.Row.Cells["NuocXX_ID"].Value.ToString());
            e.Row.Cells["DVT_ID"].Text = this.DonViTinh_GetName(e.Row.Cells["DVT_ID"].Text.ToString());
        }

        private void dgList_DeletingRecord(object sender, RowActionCancelEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                if (this.TKMD.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
                {
                    ShowMessage("Tờ khai đã được duyệt không được sửa", false);
                    e.Cancel = true;
                    return;
                }
                if (ShowMessage("Bạn có muốn xóa hàng hóa này không?", true) == "Yes")
                {
                    HangMauDich hmd = (HangMauDich)e.Row.DataRow;
                    if (hmd.ID > 0)
                    {
                        hmd.Delete();
                    }
                    if (TKMD.TrangThaiXuLy != TrangThaiXuLy.CHUA_KHAI_BAO)
                    {                      
                        this.TKMD.Load();
                        this.TKMD.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
                        this.TKMD.Update();
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }

        private void gridEX1_RowDoubleClick(object sender, RowActionEventArgs e)
        {
            ChungTuForm f = new ChungTuForm();
            if (this.TKMD.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
                f.OpenType = OpenFormType.View;
            else
                f.OpenType = OpenFormType.Edit;
            ChungTu ctDetail = new ChungTu();
            ctDetail.ID = Convert.ToInt64(e.Row.Cells["ID"].Text);
            ctDetail.TenChungTu = e.Row.Cells["TenChungTu"].Text;
            ctDetail.SoBanChinh = Convert.ToInt16(e.Row.Cells["SoBanChinh"].Text);
            ctDetail.SoBanSao = Convert.ToInt16(e.Row.Cells["SoBanSao"].Text);
            ctDetail.STTHang = Convert.ToInt16(e.Row.Cells["STTHang"].Text);
            ctDetail.Master_ID = Convert.ToInt64(e.Row.Cells["Master_ID"].Text);
            ctDetail.FileUpLoad = e.Row.Cells["FileUpLoad"].Text;
            f.ctDetail = ctDetail;
            int i = 0;
            foreach (ChungTu ct in this.TKMD.ChungTuTKCollection)
            {
                if (ct.TenChungTu.ToUpper() == ctDetail.TenChungTu.ToUpper())
                {
                    this.TKMD.ChungTuTKCollection.RemoveAt(i);
                    break;
                }
                ++i;
            }
            f.collection = this.TKMD.ChungTuTKCollection;
            f.ShowDialog();
            this.TKMD.ChungTuTKCollection = f.collection;
            gridEX1.DataSource = this.TKMD.ChungTuTKCollection;
            gridEX1.Refetch();
        }

        private void gridEX1_DeletingRecord(object sender, RowActionCancelEventArgs e)
        {
            if (this.TKMD.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                ShowMessage("Tờ khai đã được duyệt không được sửa",false);
                e.Cancel = true;
                return;
            }
            ChungTu ctDetail = new ChungTu();
            ctDetail.ID = Convert.ToInt64(e.Row.Cells["ID"].Text);
            if (ShowMessage("Bạn có muốn xóa không ?", true) == "Yes")
            {
                if (ctDetail.ID > 0)
                    ctDetail.Delete();
                this.TKMD.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
            }
            else
                e.Cancel = true;
        }

        private void dgList_DeletingRecords(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (true)
            {
                if (this.TKMD.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
                {
                    ShowMessage("Tờ khai đã được duyệt không được sửa", false);
                    e.Cancel = true;
                    return;
                }
                if (ShowMessage("Bạn có muốn xóa hàng hóa này không?", true) == "Yes")
                {
                    GridEXSelectedItemCollection items = dgList.SelectedItems;                    
                    foreach (GridEXSelectedItem i in items)
                    {
                        if(i.RowType==RowType.Record)
                        {
                            HangMauDich hmd = (HangMauDich)i.GetRow().DataRow;
                            if (hmd.ID > 0)
                            {
                                hmd.Delete();
                            }     
                        }
                    }
                    if (TKMD.TrangThaiXuLy != TrangThaiXuLy.CHUA_KHAI_BAO)
                    {
                        this.TKMD.Load();
                        this.TKMD.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
                        this.TKMD.Update();
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }
    }
}
